<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>1.基本使用</title>
		<!-- 引入开发版本的Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 
				Vue中使用组件的三大步骤：
							一、定义组件（创建组件）
							二、注册组件
							三、使用组件

				一、如何定义一个组件？
							使用Vue.extend(options)，其中的options和new Vue(options)中的options几乎一样，但也有点小区别，
							区别如下：
									1.el不要写，为什么？
											所有的组件，最终都有一个vm进行管理，由vm决定服务哪个容器，所有的组件都跟随vm走。
									2.data必须写成函数，为什么？
											避免组件后期复用时产生数据的干扰
									备注：组件的html结构需要使用template去指定
				二、注册组件
								局部注册：借助components配置项:components{组件名:组件}
								全局注册：Vue.component(组件名,组件)
				三、使用组件
								编写组件标签，例如:<School></School>


		-->
		<!-- 准备好一个容器-->
		<div id="root">
			<!-- 第三步：编写组件标签 -->
			<School></School>
			<!-- 第三步：编写组件标签 -->
			<Person></Person>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

		//第一步：定义一个School组件
		const School = Vue.extend({
			// el:'#root', // 注意：组件的配置项中不能写el
			template:`
				<div>
					<span></span>
					<h2>学校名称：{{sname}}</h2>
					<h2>学校地址：{{address}}</h2>
					<button @click="showSchool">点我提示学校信息</button>	
					<button @click="sname+='!'">点我改学校名</button>	
				</div>
			`,
			data(){ //注意：组件的data配置项必须写成函数
				return {
					sname:'尚硅谷',
					address:'宏福科技园',
				}
			},
			methods:{
				showSchool(){
					alert(`学校名：${this.sname}，学校地址：${this.address}`)
				},
			},
			watch:{
				sname(value){
					console.log('sname变了',value)
				}
			}
		})
		
		//第一步：定义一个Person组件
		const Person = Vue.extend({
			template:`
				<div>	
					<h2>人的名字：{{pname}}</h2>
					<h2>人的性别：{{gender}}</h2>
					<button @click="showPerson">点我提示人的信息</button>
				</div>
			`,
			data(){
				return {
					pname:'张三',
					gender:'男'
				}
			},
			methods:{
				showPerson(){
					alert(`人名：${this.pname}，性别：${this.gender}`)
				}
			}
		})
		
		//创建一个vm（以后整个应用当中有且只有一个！）
		new Vue({
			el:'#root',
			//第二步：注册组件（在这一步决定着：模板中组件标签的名字）
			components:{School,Person},
		})
		
	</script>
</html>